#include <iostream>
#include <deque>

struct data { int a; int pos; int left; };

int const maxn = 100007;
int da[maxn];
int n, k;

int main()
{
	std::ios::sync_with_stdio(false);
	int T;
	std::cin >> T;
	while (T--) {
		std::cin >> n >> k;
		for (int i = 0; i < n; i++) std::cin >> da[i];

		if (!k) { std::cout << "0\n"; continue; }

		std::deque<data> max;
		std::deque<data> min;
		long long ans = 0;
		for (int i = 0; i < n; i++) {
			data t1, t2;
			t1.a = da[i];  t1.pos = i;  t1.left = i;
			t2.a = da[i];  t2.pos = i;  t2.left = i;
			while (!max.empty() && t1.a > max.back().a) {
				t1.left = std::min(t1.left, max.back().left);
				max.pop_back();
			}
			max.push_back(t1);

			while (!min.empty() && t2.a < min.back().a) {
				t2.left = std::min(t2.left, min.back().left);
				min.pop_back();
			}
			min.push_back(t2);

//			std::cerr << "i: " << i << ' ' << max.size() << ' ' << min.size() << '\n';

			while (max.front().a - min.front().a >= k) {
				if (max.front().pos < min.front().pos) {
					max.pop_front();
				} else
				if (max.front().pos > min.front().pos) {
					min.pop_front();
				} else {
					if (max.front().left == max.front().pos) max.pop_front();
					if (min.front().left == min.front().pos) min.pop_front();
				}
			}
			/*
			std::cerr << "-->"; for (auto  i : max) std::cerr << i.left << ' '; std::cerr << '\n';
			std::cerr << "--->"; for (auto  i : min) std::cerr << i.left << ' '; std::cerr << '\n';
			std::cout << "i: " << i << ' ' << ans << '\n';
			*/
			int len = std::min(i - max.front().left + 1,
								i - min.front().left + 1);
			ans += len;
		}
		std::cout << ans << '\n';
	}
}
